package com.shopx.dal.redis;

import java.util.Set;

/**
 * 缓存服务接口
 *
 * @author jiangxinde
 * @date 2018-11-21 16:10
 */
public interface CacheService {

    /**
     * 判断key是否存在
     *
     * @param key 键
     * @return boolean
     * @author jiangxinde
     * @date 2018-11-21 16:12
     */
    boolean hasKey(String key);

    /**
     * 普通缓存放入
     *
     * @param key   键
     * @param value 值
     * @return boolean
     * @author jiangxinde
     * @date 2018-11-21 16:13
     */
    boolean set(String key, Object value);

    /**
     * 普通缓存放入并设置时间
     *
     * @param key   键
     * @param value 值
     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
     * @return boolean true成功 false 失败
     * @author jiangxinde
     * @date 2018-11-21 16:13
     */
    boolean set(String key, Object value, long time);

    /**
     * 删除缓存
     *
     * @param key 键
     * @author jiangxinde
     * @date 2018-11-21 16:14
     */
    void del(String... key);

    /**
     * 删除缓存
     *
     * @param pattern pattern
     * @author jiangxinde
     * @date 2018-11-23 15:03
     */
    void delAll(String pattern);

    /**
     * 普通缓存获取
     *
     * @param key 键
     * @return Object 值
     * @author jiangxinde
     * @date 2018-11-21 16:15
     */
    Object get(String key);

    /**
     * 根据key模式获取所有的缓存
     *
     * @param pattern
     * @return java.util.Set<java.lang.Object>
     * @author jiangxinde
     * @date 2018-11-21 16:15
     */
    Set<Object> getAll(String pattern);

    /**
     * 指定缓存失效时间
     * @author jiangxinde
     * @date 11:40 2021/7/15
     * @param key  键
     * @param time 时间(秒)
     * @return
     */
    boolean expire(String key, long time);

    /**
     * 根据key 获取过期时间
     *
     * @param key 键 不能为null
     * @return 时间(秒) 返回0代表为永久有效
     */
    long getExpire(String key);

    /**
     * 构建缓存key
     *
     * @param args
     * @return
     */
     String buildKey(String... args);
}
